home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1999 January: Mac OS SDK / Dev.CD Jan 99 SDK1.toast / Development Kits / Interfaces&Libraries / Universal / Interfaces / AIncludes / DateTimeUtils.a < prev    next >
Encoding:
Text File  |  1998-08-17  |  14.4 KB  |  524 lines  |  [TEXT/MPS ]

  1. ;
  2. ;    File:        DateTimeUtils.a
  3. ;
  4. ;    Contains:    International Date and Time Interfaces (previously in TextUtils)
  5. ;
  6. ;    Version:    Technology:    System 7.5
  7. ;                Release:    Universal Interfaces 3.2
  8. ;
  9. ;    Copyright:    © 1994-1998 by Apple Computer, Inc., all rights reserved.
  10. ;
  11. ;    Bugs?:        For bug reports, consult the following page on
  12. ;                the World Wide Web:
  13. ;
  14. ;                    http://developer.apple.com/bugreporter/
  15. ;
  16. ;
  17.     IF &TYPE('__DATETIMEUTILS__') = 'UNDEFINED' THEN
  18. __DATETIMEUTILS__ SET 1
  19.  
  20.     IF &TYPE('__CONDITIONALMACROS__') = 'UNDEFINED' THEN
  21.     include 'ConditionalMacros.a'
  22.     ENDIF
  23.     IF &TYPE('__MACTYPES__') = 'UNDEFINED' THEN
  24.     include 'MacTypes.a'
  25.     ENDIF
  26.  
  27. ;
  28. ;    Here are the current routine names and the translations to the older forms.
  29. ;    Please use the newer forms in all new code and migrate the older names out of existing
  30. ;    code as maintainance permits.
  31. ;    
  32. ;    New Name                    Old Name(s)
  33. ;    
  34. ;    DateString                    IUDatePString IUDateString 
  35. ;    InitDateCache
  36. ;    LongDateString                IULDateString
  37. ;    LongTimeString                IULTimeString
  38. ;    StringToDate                String2Date
  39. ;    StringToTime                                
  40. ;    TimeString                    IUTimeString IUTimePString
  41. ;    LongDateToSeconds            LongDate2Secs
  42. ;    LongSecondsToDate            LongSecs2Date
  43. ;    DateToSeconds                Date2Secs
  44. ;    SecondsToDate                Secs2Date
  45. ;
  46.  
  47.  
  48.  
  49.                                                             ; Toggle results 
  50. toggleUndefined                    EQU        0
  51. toggleOK                        EQU        1
  52. toggleBadField                    EQU        2
  53. toggleBadDelta                    EQU        3
  54. toggleBadChar                    EQU        4
  55. toggleUnknown                    EQU        5
  56. toggleBadNum                    EQU        6
  57. toggleOutOfRange                EQU        7                    ;synonym for toggleErr3
  58. toggleErr3                        EQU        7
  59. toggleErr4                        EQU        8
  60. toggleErr5                        EQU        9
  61.  
  62.                                                             ; Date equates 
  63. smallDateBit                    EQU        31                    ;Restrict valid date/time to range of Time global
  64. togChar12HourBit                EQU        30                    ;If toggling hour by char, accept hours 1..12 only
  65. togCharZCycleBit                EQU        29                    ;Modifier for togChar12HourBit: accept hours 0..11 only
  66. togDelta12HourBit                EQU        28                    ;If toggling hour up/down, restrict to 12-hour range (am/pm)
  67. genCdevRangeBit                    EQU        27                    ;Restrict date/time to range used by genl CDEV
  68. validDateFields                    EQU        -1
  69. maxDateField                    EQU        10
  70.  
  71. eraMask                            EQU        $0001
  72. yearMask                        EQU        $0002
  73. monthMask                        EQU        $0004
  74. dayMask                            EQU        $0008
  75. hourMask                        EQU        $0010
  76. minuteMask                        EQU        $0020
  77. secondMask                        EQU        $0040
  78. dayOfWeekMask                    EQU        $0080
  79. dayOfYearMask                    EQU        $0100
  80. weekOfYearMask                    EQU        $0200
  81. pmMask                            EQU        $0400
  82. dateStdMask                        EQU        $007F                ;default for ValidDate flags and ToggleDate TogglePB.togFlags
  83.  
  84. eraField                        EQU        0
  85. yearField                        EQU        1
  86. monthField                        EQU        2
  87. dayField                        EQU        3
  88. hourField                        EQU        4
  89. minuteField                        EQU        5
  90. secondField                        EQU        6
  91. dayOfWeekField                    EQU        7
  92. dayOfYearField                    EQU        8
  93. weekOfYearField                    EQU        9
  94. pmField                            EQU        10
  95. res1Field                        EQU        11
  96. res2Field                        EQU        12
  97. res3Field                        EQU        13
  98. ; typedef SignedByte                     LongDateField
  99.  
  100.  
  101. shortDate                        EQU        0
  102. longDate                        EQU        1
  103. abbrevDate                        EQU        2
  104. ; typedef SInt8                         DateForm
  105.  
  106.  
  107.                                                             ; StringToDate status values 
  108. fatalDateTime                    EQU        $8000                ; StringToDate and String2Time mask to a fatal error 
  109. longDateFound                    EQU        1                    ; StringToDate mask to long date found 
  110. leftOverChars                    EQU        2                    ; StringToDate & Time mask to warn of left over characters 
  111. sepNotIntlSep                    EQU        4                    ; StringToDate & Time mask to warn of non-standard separators 
  112. fieldOrderNotIntl                EQU        8                    ; StringToDate & Time mask to warn of non-standard field order 
  113. extraneousStrings                EQU        16                    ; StringToDate & Time mask to warn of unparsable strings in text 
  114. tooManySeps                        EQU        32                    ; StringToDate & Time mask to warn of too many separators 
  115. sepNotConsistent                EQU        64                    ; StringToDate & Time mask to warn of inconsistent separators 
  116. tokenErr                        EQU        $8100                ; StringToDate & Time mask for 'tokenizer err encountered' 
  117. cantReadUtilities                EQU        $8200
  118. dateTimeNotFound                EQU        $8400
  119. dateTimeInvalid                    EQU        $8800
  120. ; typedef short                         StringToDateStatus
  121.  
  122. ; typedef short                         String2DateStatus
  123.  
  124. DateCacheRecord            RECORD 0
  125. hidden                     ds.w    256                ; offset: $0 (0)        ;  only for temporary use 
  126. sizeof                     EQU *                    ; size:   $200 (512)
  127.                         ENDR
  128. ; typedef struct DateCacheRecord *        DateCachePtr
  129.  
  130. DateTimeRec                RECORD 0
  131. year                     ds.w    1                ; offset: $0 (0)
  132. month                     ds.w    1                ; offset: $2 (2)
  133. day                         ds.w    1                ; offset: $4 (4)
  134. hour                     ds.w    1                ; offset: $6 (6)
  135. minute                     ds.w    1                ; offset: $8 (8)
  136. second                     ds.w    1                ; offset: $A (10)
  137. dayOfWeek                 ds.w    1                ; offset: $C (12)
  138. sizeof                     EQU *                    ; size:   $E (14)
  139.                         ENDR
  140. LongDateTime            RECORD 0
  141. f                         ds        SInt64
  142. sizeof                     EQU *                    ; size:   $8 (8)
  143.                         ENDR
  144.  
  145.  
  146. LongDateCvt                RECORD 0
  147. c                         ds        SInt64            ; offset: $0 (0)
  148.                          ORG 0
  149. lHigh                     ds.l    1                ; offset: $0 (0)
  150. lLow                     ds.l    1                ; offset: $4 (4)
  151. sizeof                     EQU *                    ; size:   $8 (8)
  152.                         ENDR
  153. LongDateRec                RECORD 0
  154. era                         ds.w    1                ; offset: $0 (0)
  155. year                     ds.w    1                ; offset: $2 (2)
  156. month                     ds.w    1                ; offset: $4 (4)
  157. day                         ds.w    1                ; offset: $6 (6)
  158. hour                     ds.w    1                ; offset: $8 (8)
  159. minute                     ds.w    1                ; offset: $A (10)
  160. second                     ds.w    1                ; offset: $C (12)
  161. dayOfWeek                 ds.w    1                ; offset: $E (14)
  162. dayOfYear                 ds.w    1                ; offset: $10 (16)
  163. weekOfYear                 ds.w    1                ; offset: $12 (18)
  164. pm                         ds.w    1                ; offset: $14 (20)
  165. res1                     ds.w    1                ; offset: $16 (22)
  166. res2                     ds.w    1                ; offset: $18 (24)
  167. res3                     ds.w    1                ; offset: $1A (26)
  168.                          ORG 0
  169. list                     ds.w    14                ; offset: $0 (0)        ; Index by LongDateField!
  170.                          ORG 0
  171. eraAlt                     ds.w    1                ; offset: $0 (0)
  172. oldDate                     ds        DateTimeRec        ; offset: $2 (2)
  173.                          ORG 28
  174. sizeof                     EQU *                    ; size:   $1C (28)
  175.                         ENDR
  176. ; typedef SInt8                         DateDelta
  177.  
  178. TogglePB                RECORD 0
  179. togFlags                 ds.l    1                ; offset: $0 (0)        ; caller normally sets low word to dateStdMask=$7F
  180. amChars                     ds.l    1                ; offset: $4 (4)        ; from 'itl0', but uppercased
  181. pmChars                     ds.l    1                ; offset: $8 (8)        ; from 'itl0', but uppercased
  182. reserved                 ds.l    4                ; offset: $C (12)
  183. sizeof                     EQU *                    ; size:   $1C (28)
  184.                         ENDR
  185. ; typedef short                         ToggleResults
  186.  
  187. ; **************************************************************************************
  188. ; *
  189. ; * The following functions are new names that work on 68k and PowerPC
  190. ; *
  191. ; **************************************************************************************
  192. ;
  193.  
  194.  
  195. ;
  196. ; pascal OSErr InitDateCache(DateCachePtr theCache)
  197. ;
  198.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  199.         Macro
  200.         _InitDateCache
  201.             move.l              #$8204FFF8,-(sp)
  202.             dc.w                $A8B5
  203.         EndM
  204.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  205.         IMPORT_CFM_FUNCTION InitDateCache
  206.     ENDIF
  207.  
  208. ;
  209. ; pascal StringToDateStatus StringToDate(Ptr textPtr, long textLen, DateCachePtr theCache, long *lengthUsed, LongDateRec *dateTime)
  210. ;
  211.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  212.         Macro
  213.         _StringToDate
  214.             move.l              #$8214FFF6,-(sp)
  215.             dc.w                $A8B5
  216.         EndM
  217.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  218.         IMPORT_CFM_FUNCTION StringToDate
  219.     ENDIF
  220.  
  221. ;
  222. ; pascal StringToDateStatus StringToTime(Ptr textPtr, long textLen, DateCachePtr theCache, long *lengthUsed, LongDateRec *dateTime)
  223. ;
  224.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  225.         Macro
  226.         _StringToTime
  227.             move.l              #$8214FFF4,-(sp)
  228.             dc.w                $A8B5
  229.         EndM
  230.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  231.         IMPORT_CFM_FUNCTION StringToTime
  232.     ENDIF
  233.  
  234. ;
  235. ; pascal void IUDateString(long dateTime, DateForm longFlag, Str255 result)
  236. ;
  237.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  238.         Macro
  239.         _IUDateString
  240.             clr.w               -(sp)
  241.             dc.w                $A9ED
  242.         EndM
  243.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  244.         IMPORT_CFM_FUNCTION IUDateString
  245.     ENDIF
  246.  
  247. ;
  248. ; pascal void IUTimeString(long dateTime, Boolean wantSeconds, Str255 result)
  249. ;
  250.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  251.         Macro
  252.         _IUTimeString
  253.             move.w              #$0002,-(sp)
  254.             dc.w                $A9ED
  255.         EndM
  256.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  257.         IMPORT_CFM_FUNCTION IUTimeString
  258.     ENDIF
  259.  
  260. ;
  261. ; pascal void IUDatePString(long dateTime, DateForm longFlag, Str255 result, Handle intlHandle)
  262. ;
  263.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  264.         Macro
  265.         _IUDatePString
  266.             move.w              #$000E,-(sp)
  267.             dc.w                $A9ED
  268.         EndM
  269.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  270.         IMPORT_CFM_FUNCTION IUDatePString
  271.     ENDIF
  272.  
  273. ;
  274. ; pascal void IUTimePString(long dateTime, Boolean wantSeconds, Str255 result, Handle intlHandle)
  275. ;
  276.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  277.         Macro
  278.         _IUTimePString
  279.             move.w              #$0010,-(sp)
  280.             dc.w                $A9ED
  281.         EndM
  282.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  283.         IMPORT_CFM_FUNCTION IUTimePString
  284.     ENDIF
  285.  
  286. ;
  287. ; pascal void IULDateString(LongDateTime *dateTime, DateForm longFlag, Str255 result, Handle intlHandle)
  288. ;
  289.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  290.         Macro
  291.         _IULDateString
  292.             move.w              #$0014,-(sp)
  293.             dc.w                $A9ED
  294.         EndM
  295.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  296.         IMPORT_CFM_FUNCTION IULDateString
  297.     ENDIF
  298.  
  299. ;
  300. ; pascal void IULTimeString(LongDateTime *dateTime, Boolean wantSeconds, Str255 result, Handle intlHandle)
  301. ;
  302.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  303.         Macro
  304.         _IULTimeString
  305.             move.w              #$0016,-(sp)
  306.             dc.w                $A9ED
  307.         EndM
  308.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  309.         IMPORT_CFM_FUNCTION IULTimeString
  310.     ENDIF
  311.  
  312.  
  313. ;
  314. ; pascal void LongDateToSeconds(const LongDateRec *lDate, LongDateTime *lSecs)
  315. ;
  316.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  317.         Macro
  318.         _LongDateToSeconds
  319.             move.l              #$8008FFF2,-(sp)
  320.             dc.w                $A8B5
  321.         EndM
  322.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  323.         IMPORT_CFM_FUNCTION LongDateToSeconds
  324.     ENDIF
  325.  
  326. ;
  327. ; pascal void LongSecondsToDate(const LongDateTime *lSecs, LongDateRec *lDate)
  328. ;
  329.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  330.         Macro
  331.         _LongSecondsToDate
  332.             move.l              #$8008FFF0,-(sp)
  333.             dc.w                $A8B5
  334.         EndM
  335.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  336.         IMPORT_CFM_FUNCTION LongSecondsToDate
  337.     ENDIF
  338.  
  339. ;
  340. ; pascal ToggleResults ToggleDate(LongDateTime *lSecs, LongDateField field, DateDelta delta, short ch, const TogglePB *params)
  341. ;
  342.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  343.         Macro
  344.         _ToggleDate
  345.             move.l              #$820EFFEE,-(sp)
  346.             dc.w                $A8B5
  347.         EndM
  348.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  349.         IMPORT_CFM_FUNCTION ToggleDate
  350.     ENDIF
  351.  
  352. ;
  353. ; pascal short ValidDate(const LongDateRec *vDate, long flags, LongDateTime *newSecs)
  354. ;
  355.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  356.         Macro
  357.         _ValidDate
  358.             move.l              #$820CFFE4,-(sp)
  359.             dc.w                $A8B5
  360.         EndM
  361.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  362.         IMPORT_CFM_FUNCTION ValidDate
  363.     ENDIF
  364.  
  365. ;
  366. ; pascal OSErr ReadDateTime(unsigned long *time)
  367. ;
  368.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  369.         ; parameters:
  370.         ;    time            => A0
  371.         ; returns:
  372.         ;    OSErr           <= D0
  373.         _ReadDateTime:    OPWORD    $A039
  374.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  375.         IMPORT_CFM_FUNCTION ReadDateTime
  376.     ENDIF
  377.  
  378. ;
  379. ; pascal void GetDateTime(unsigned long *secs)
  380. ;
  381.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  382.         ; parameters:
  383.         ;    secs            => A0
  384.         Macro
  385.         _GetDateTime
  386.             move.l              $020C,(A0)
  387.         EndM
  388.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  389.         IMPORT_CFM_FUNCTION GetDateTime
  390.     ENDIF
  391.  
  392. ;
  393. ; pascal OSErr SetDateTime(unsigned long time)
  394. ;
  395.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  396.         ; parameters:
  397.         ;    time            => D0
  398.         ; returns:
  399.         ;    OSErr           <= D0
  400.         _SetDateTime:    OPWORD    $A03A
  401.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  402.         IMPORT_CFM_FUNCTION SetDateTime
  403.     ENDIF
  404.  
  405. ;
  406. ; pascal void SetTime(const DateTimeRec *d)
  407. ;
  408.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  409.         ; parameters:
  410.         ;    d               => A0
  411.         Macro
  412.         _SetTime
  413.             dc.w                $A9C7
  414.             dc.w                $A03A
  415.         EndM
  416.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  417.         IMPORT_CFM_FUNCTION SetTime
  418.     ENDIF
  419.  
  420. ;
  421. ; pascal void GetTime(DateTimeRec *d)
  422. ;
  423.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  424.         ; parameters:
  425.         ;    d               => A0
  426.         Macro
  427.         _GetTime
  428.             move.l              $020C,D0
  429.             dc.w                $A9C6
  430.         EndM
  431.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  432.         IMPORT_CFM_FUNCTION GetTime
  433.     ENDIF
  434.  
  435. ;
  436. ; pascal void DateToSeconds(const DateTimeRec *d, unsigned long *secs)
  437. ;
  438.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  439.         _DateToSeconds:    OPWORD    $A9C7
  440.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  441.         IMPORT_CFM_FUNCTION DateToSeconds
  442.     ENDIF
  443.  
  444. ;
  445. ; pascal void SecondsToDate(unsigned long secs, DateTimeRec *d)
  446. ;
  447.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  448.         ; parameters:
  449.         ;    secs            => D0
  450.         ;    d               => A0
  451.         _SecondsToDate:    OPWORD    $A9C6
  452.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  453.         IMPORT_CFM_FUNCTION SecondsToDate
  454.     ENDIF
  455.  
  456. ; **************************************************************************************
  457. ; *
  458. ; * The following provide direct function prototypes for new names for 68k
  459. ; *
  460. ; **************************************************************************************
  461. ;
  462.  
  463. ;
  464. ; pascal void DateString(long dateTime, DateForm longFlag, Str255 result, Handle intlHandle)
  465. ;
  466.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  467.         Macro
  468.         _DateString
  469.             move.w              #$000E,-(sp)
  470.             dc.w                $A9ED
  471.         EndM
  472.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  473.         IMPORT_CFM_FUNCTION DateString
  474.     ENDIF
  475.  
  476. ;
  477. ; pascal void TimeString(long dateTime, Boolean wantSeconds, Str255 result, Handle intlHandle)
  478. ;
  479.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  480.         Macro
  481.         _TimeString
  482.             move.w              #$0010,-(sp)
  483.             dc.w                $A9ED
  484.         EndM
  485.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  486.         IMPORT_CFM_FUNCTION TimeString
  487.     ENDIF
  488.  
  489. ;
  490. ; pascal void LongDateString(LongDateTime *dateTime, DateForm longFlag, Str255 result, Handle intlHandle)
  491. ;
  492.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  493.         Macro
  494.         _LongDateString
  495.             move.w              #$0014,-(sp)
  496.             dc.w                $A9ED
  497.         EndM
  498.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  499.         IMPORT_CFM_FUNCTION LongDateString
  500.     ENDIF
  501.  
  502. ;
  503. ; pascal void LongTimeString(LongDateTime *dateTime, Boolean wantSeconds, Str255 result, Handle intlHandle)
  504. ;
  505.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  506.         Macro
  507.         _LongTimeString
  508.             move.w              #$0016,-(sp)
  509.             dc.w                $A9ED
  510.         EndM
  511.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  512.         IMPORT_CFM_FUNCTION LongTimeString
  513.     ENDIF
  514.  
  515.  
  516.  
  517.  
  518.  
  519.     ENDIF ; __DATETIMEUTILS__ 
  520.  
  521.